package middlewares

import (
	"bluebell/pkg/jwt"
	"bluebell/utils"
	"github.com/gin-gonic/gin"
)

func JWTAuthMiddleware() func(c *gin.Context) {
	return func(c *gin.Context) {
		// Token一般放在Header的Authorization中，并使用Bearer开头
		// 这里的具体实现方式要依据你的实际业务情况决定
		authHeader := c.Request.Header.Get("Authorization")
		if authHeader == "" {
			utils.ResponseError(c, utils.CodeUserNotLogin)
			c.Abort()
			return
		}

		mc, err := jwt.ParseToken(authHeader)
		if err != nil {
			utils.ResponseError(c, utils.CodeInvalidUserAuth)
			c.Abort()
			return
		}
		// 将当前请求的userid信息保存到请求的上下文c上
		c.Set(utils.ContextUserIDKey, mc.UserID)
		c.Next() //后续的处理函数可以用过c.Get("xxx")来获取当前请求的用户的userid
	}
}
